//=============================
//
// 文字列フォーマット関連
//
//=============================
/*
 * 関数名：ZeroFormat
 * 概　要：数値が指定した桁数になるまで数値の先頭をゼロで埋める
 * 引　数：integer num    数値
 *         integer max    桁数
 * 戻り値：integer ゼロ埋め後の数値
 */
function ZeroFormat(num,max){
  var tmp=''+num;
  while(tmp.length<max){
    tmp='0'+tmp;
  }
  return tmp;
}

/*
 * 関数名：money_format
 * 概　要：数値を３桁カンマ編集した文字列を返す
 * 引　数：integer num    数値
 * 戻り値：string カンマ編集した数値文字列
 */
function money_format(num) {
	// カンマ編集
	num = String( num );
	num.match( /(\d+)(\.\d+)*/ );
	num = RegExp.$1;
	var frac = RegExp.$2;
	switch (frac.length){
	case 0:
	    frac = ".00";
	    break;
	case 2:
	    frac += "0";
	    break;
	default:
	}
	while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
	num = frac ? num + frac : num;
    return num;
}

//=============================
//
// フォームエレメント関連
//
//=============================
/*
 * 関数名：setFormElementValue
 * 概　要：フォームのエレメントに対し値を設定する
 * 引　数：form_name    string      フォームname属性
 *         elm_name     string      エレメントname属性
 *         value        string      設定する値
 * 戻り値：なし
 */
function setFormElementValue( form_name, elm_name, value ){
    try{
        if( value == null ) value = "" ;
        if( typeof value != 'string' && typeof value != 'number' ) return ;
        var elms = this.getFormElements(form_name, elm_name) ;
        if( elms == null ) return null ;
        for( var index=0 ; index<elms.length ; index++ ){

            switch( elms[index].type.toLowerCase() ){
                case 'radio' :
                case 'checkbox' :
                    elms[index].checked = (elms[index].value==value ? true : false ) ;
                    break ;
                case 'select-one' :
                    for( var optindex=0 ; optindex<elms[index].options.length ; optindex++ ){
                        if( elms[index].options[optindex].value == value ){
                            elms[index].selectedIndex = optindex;
                            break ;
                        }
                    }
                    break ;
                default :
                    elms[index].value = value ;
                    break ;
            }
        }

    }
    catch(e){
        alert(e.message + ":" + elm_name + ":" + value) ;
    }
}

/*
 * 関数名：getFormElements
 * 概　要：フォームエレメントオブジェクトを取得する
 * 引　数：form_name    string      フォームname属性
 *         elm_name     string      エレメントname属性
 * 戻り値：ElementまたはArray       該当のエレメントオブジェクト(またはその配列)
 */
function getFormElements(form_name, elm_name ){
    var elm = document.forms[form_name][elm_name] ;

    if( elm == null ) return null ;

    if( elm.length != null ){
        try{
            if( elm.type.toLowerCase() ){
                return new Array(elm) ;
            }
            else{
                return elm ;
            }
        }
        catch(e){
            return elm ;
        }
    }
    else{
        return new Array(elm) ;
    }
}

/*
 * 関数名：setElementValueByElment
 * 概　要：指定されたエレメントオブジェクトに対し、値を設定する
 * 引　数：elm          Object      エレメントオブジェクト
 *         value        string      設定する値
 * 戻り値：なし
 */
function setElementValueByElment( elm, value ){
    try{
        switch( elm.type.toLowerCase() ){
            case 'radio' :
            case 'checkbox' :
                elm.checked = (elm.value==value ? true : false ) ;
                break ;
            case 'select-one' :
                for( var oindex=0 ; oindex<elm.options.length ; oindex++ ){
                    if( elm.options[oindex].value == value ){
                        elm.selectedIndex = oindex ;
                        break ;
                    }
                }
                if( oindex >= elm.options.length ){
                    elm.selectedIndex = -1 ;
                }
                break ;
            default :
                elm.value = value ;
                break ;
        }
    }
    catch(e){
        alert(e.message + ":" + elm.name + ":" + value) ;
    }
}


//=============================
//
// 関数呼び出し関連
//
//=============================
/*
 * 関数名：callFunc
 * 概　要：thisスコープを設定して、関数呼び出しを行う
 * 引　数：func         function        対象の関数
 *         targetObj    オブジェクト    関数内でthisとして扱うオブジェクト
 * 戻り値：なし
 */
function callFunc(func, targetObj){
    if( targetObj != null ){
        var scpfunc = setScope( func, targetObj ) ;
        scpfunc() ;
    }
    else{
        scpfunc() ;
    }
}
/*
 * 関数名：setScope
 * 概　要：関数内でのthisスコープを設定する
 * 引　数：func         function        対象の関数
 *         targetObj    オブジェクト    関数内でthisとして扱うオブジェクト
 * 戻り値：function     スコープ設定済みの関数
 */
function setScope(func, targetObj){
	var scp = function(){
					return func.apply(targetObj, arguments);
				};
	return scp; 
}



//=============================
//
// URL関連
//
//=============================

//=============================
//
// 共通UI関連
//
//=============================
var app_elm_loading = null ;
var app_elm_loading_visible = false ;
var spp_loading_timer_id = null ;
function app_loadingStart(){
    app_elm_loading_visible = true ;
    spp_loading_timer_id = window.setTimeout( app_loadingCheck, 1000 ) ;

    if( app_elm_loading == null ){
/*
        app_elm_loading = new YAHOO.widget.Panel("app_loading", 
                                            {   width:"240px", 
											    fixedcenter:true, 
											    close:false, 
												draggable:false, 
												modal:true,
												visible:false
        		                            });
*/
        app_elm_loading = new Object() ;
        app_elm_loading.mask = document.createElement("DIV");
        app_elm_loading.mask.id = "app_mask";
        app_elm_loading.mask.className = "app_mask";
        app_elm_loading.mask.innerHTML = "&#160;";
        var firstChild = document.body.firstChild;
        if (firstChild)	{
        	document.body.insertBefore(app_elm_loading.mask, document.body.firstChild);
        } else {
        	document.body.appendChild(app_elm_loading.mask);
        }
        //YAHOO.util.Dom.addClass(document.body, "masked");
    }
    //app_elm_loading.mask.style.height = YAHOO.util.Dom.getDocumentHeight()+"px";
    //app_elm_loading.mask.style.width = YAHOO.util.Dom.getDocumentWidth()+"px";
    var body = Ext.getBody()
    app_elm_loading.mask.style.height = body.getHeight()+"px";
    app_elm_loading.mask.style.width = body.getDocumentWidth()+"px";
    app_elm_loading.mask.style.display = "block";
//    app_elm_loading.show(null);
   document.getElementById('app_loading').style.visibility = 'visible' ;
   document.getElementById('app_loading').style.zIndex = 500000 ;
}

function app_loadingEnd(){
    app_elm_loading_visible = false ;
}

function app_loadingCheck(){
    if( app_elm_loading_visible ){
        spp_loading_timer_id = window.setTimeout( app_loadingCheck, 1000 ) ;
    }

    if( app_elm_loading != null ){
//        app_elm_loading.hide();
        app_elm_loading.mask.style.display = "none";
        //YAHOO.util.Dom.removeClass(document.body, "masked");
    }
   document.getElementById('app_loading').style.visibility = 'hidden' ;
   app_elm_loading_visible = false ;
}